<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="utf-8" />
		<base href="../../../" />
		<script src="page.js"></script>
		<link type="text/css" rel="stylesheet" href="page.css" />
	</head>
	<body>
		<h1>[name]</h1>

		<p>
		Représentation d'une géométrie de maillage, de ligne ou de point. Comprend les positions des sommets, les indices de faces,
		normales, couleurs, UV et attributs personnalisés dans les tampons, réduisant ainsi le coût de
		transmettre toutes ces données au GPU.
		</p>
		<p>
			Pour lire et modifier des données dans les attributs BufferGeometry, consultez la documentation [page:BufferAttribute].
		</p>

		<h2>Exemple de code : </h2>
		<code>
		const geometry = new THREE.BufferGeometry();
		// créer une forme carrée simple. Nous dupliquons le haut à gauche et le bas à droite
		// sommets car chaque sommet doit apparaître une fois par triangle.
		const vertices = new Float32Array( [
			-1.0, -1.0,  1.0,
			 1.0, -1.0,  1.0,
			 1.0,  1.0,  1.0,

			 1.0,  1.0,  1.0,
			-1.0,  1.0,  1.0,
			-1.0, -1.0,  1.0
		] );

		// itemSize = 3 parce qu'il y a 3 valeurs (comoosants) par sommet
		geometry.setAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) );
		const material = new THREE.MeshBasicMaterial( { color: 0xff0000 } );
		const mesh = new THREE.Mesh( geometry, material );
		</code>

		<h2>Exemples</h2>
		<p>
			[example:webgl_buffergeometry Mesh with non-indexed faces]<br />
			[example:webgl_buffergeometry_indexed Mesh with indexed faces]<br />
			[example:webgl_buffergeometry_lines Lines]<br />
			[example:webgl_buffergeometry_lines_indexed Indexed Lines]<br />
			[example:webgl_buffergeometry_custom_attributes_particles Particles]<br />
			[example:webgl_buffergeometry_rawshader Raw Shaders]
		</p>

		<h2>Constructeur</h2>


		<h3>[name]()</h3>
		<div>
		Cela crée un nouveau [name]. Il définit également plusieurs propriétés sur une valeur par défaut.
		</div>


		<h2>Propriétés</h2>

		<h3>[property:Object attributes]</h3>
		<p>
		Ce hashmap a comme identifiant le nom de l'attribut à définir et comme valeur le [page:BufferAttribute buffer] à lui attribuer.
		Plutôt que d'accéder directement à cette propriété, utilisez [page:.setAttribute] et [page:.getAttribute] pour accéder aux attributs de cette géométrie.
		</p>

		<h3>[property:Box3 boundingBox]</h3>
		<p>
			Boîte englobante pour le bufferGeometry, qui peut être calculée avec
			[page:.computeBoundingBox](). La valeur par défaut est `null`.
		</p>

		<h3>[property:Sphere boundingSphere]</h3>
		<p>
			Sphère englobante pour le bufferGeometry, qui peut être calculée avec
			[page:.computeBoundingSphere](). La valeur par défaut est `null`.
		</p>

		<h3>[property:Object drawRange]</h3>
		<p>
			Détermine la partie de la géométrie à rendre. Cela ne devrait pas
			être défini directement, utilisez à la place[page:.setDrawRange]. La valeur par défaut est
			<code>
				{ start: 0, count: Infinity }
			</code>
			Pour BufferGeometry non indexé, count est le nombre de sommets à rendre.
			Pour BufferGeometry indexé, count est le nombre d'indices à rendre.
		</p>

		<h3>[property:Array groups]</h3>
		<p>
			Divise la géométrie en groupes, dont chacun sera rendu dans un appel de dessin WebGL distinct.
			Cela permet d'utiliser un éventail de matériaux avec la géométrie.<br /><br />

			Chaque groupe est un objet de la forme :
			<code>{ start: Integer, count: Integer, materialIndex: Integer }</code>
			où start spécifie le premier élément de cet appel de dessin - le premier sommet de la géométrie non indexée,
			sinon le premier indice triangulaire. Count spécifie combien de sommets (ou indices) sont inclus, et
			materialIndex spécifie l'index de tableau de matériaux à utiliser.<br /><br />

			Utilisez [page:.addGroup] pour ajouter des groupes au lieu de modifier le tableau directement.<br /><br />

			Chaque sommet et index doit appartenir à exactement un groupe — les groupes ne doivent pas partager de sommets ou d'indices, et ne doivent pas laisser de sommets ou d'indices inutilisés.
		</p>


		<!-- Note: groups used to be called drawCalls

		<h3>[property:Array drawcalls]</h3>
		<p>
		For geometries that use indexed triangles, this Array can be used to split the object
		into multiple WebGL draw calls. Each draw call will draw some subset of the vertices
		in this geometry using the configured [page:Material shader]. This may be necessary if,
		for instance, you have more than 65535 vertices in your object.
		</p> -->


		<h3>[property:Integer id]</h3>
		<p>Numéro unique pour cette instance de bufferGeometry.</p>

		<h3>[property:BufferAttribute index]</h3>
		<p>
			Permet de réutiliser les sommets sur plusieurs triangles ; c'est ce qu'on appelle utiliser des "triangles indexés".
			Chaque triangle est associé aux indices de trois sommets. Cet attribut stocke donc l'indice de chaque sommet pour chaque face triangulaire.

			Si cet attribut n'est pas défini, le [page: WebGLRenderer renderer] suppose que chacun des trois éléments contigus
			les positions représentent un seul triangle.

			La valeur par défaut est `null`.
		</p>

		<h3>[property:Boolean isBufferGeometry]</h3>
		<p>
			Booléen en lecture seule pour vérifier si un objet donné est de type [name].
		</p>

		<h3>[property:Object morphAttributes]</h3>
		<p>
			Hashmap de [page:BufferAttribute] contenant les détails des cibles de morphing de la géométrie.<br />
			Remarque : Une fois la géométrie rendue, les données d'attribut de morphing ne peuvent pas être modifiées. Vous devrez appeler [page:.dispose]() et créer une nouvelle instance de [nom].
		</p>

		<h3>[property:Boolean morphTargetsRelative]</h3>
		<p>
			Utilisé pour contrôler le comportement de la cible de morphing ; lorsqu'il est défini sur true, les données cibles de morphing sont traitées comme des décalages relatifs, plutôt que comme des positions/normales absolues.

			La valeur par défaut est "faux".
		</p>

		<h3>[property:String name]</h3>
		<p>
			Nom facultatif pour cette instance de bufferGeometry. La valeur par défaut est une chaîne vide.
		</p>

		<h3>[property:Object userData]</h3>
		<p>
			Un objet qui peut être utilisé pour stocker des données personnalisées sur le BufferGeometry. Il ne doit pas contenir
			de références aux fonctions car celles-ci ne seront pas clonées.
		</p>

		<h3>[property:String uuid]</h3>
		<p>
		[link:http://en.wikipedia.org/wiki/Universally_unique_identifier UUID] de l'instance de l'objet.
		Celui-ci est automatiquement attribué et ne doit pas être modifié.
		</p>

		<h2>Méthodes</h2>

		<p>Les méthodes [page:EventDispatcher EventDispatcher] sont accessibles depuis cette classe.</p>

		<h3>[method:undefined addGroup]( [param:Integer start], [param:Integer count], [param:Integer materialIndex] )</h3>
		<p>
			Ajoute un groupe à cette géométrie; voir les propriétés des [page:BufferGeometry.groups groups]
			pour plus de détails.
		</p>

		<h3>[method:this applyMatrix4]( [param:Matrix4 matrix] )</h3>
		<p>Applique la transformation matricielle à la géométrie.</p>

		<h3>[method:this applyQuaternion]( [param:Quaternion quaternion] )</h3>
		<p>Applique la rotation représentée par le quaternion à la géométrie.</p>

		<h3>[method:this center] ()</h3>
		<p>Centre la géométrie en fonction de la boîte englobante.</p>

		<h3>[method:undefined clearGroups]( )</h3>
		<p>Efface tous les groupes.</p>

		<h3>[method:BufferGeometry clone]()</h3>
		<p>Crée un clone de ce BufferGeometry.</p>

		<h3>[method:undefined computeBoundingBox]()</h3>
		<p>
		Calcule la boîte englobante de la géométrie, met à jour l'attribut [page:.boundingBox].<br />
		Les boîtes englobantes ne sont pas calculées par défaut. Ils doivent être calculés explicitement, sinon elles sont `null`.
		</p>

		<h3>[method:undefined computeBoundingSphere]()</h3>
		<p>
		Calcule la boîte englobante de la géométrie, met à jour l'attribut [page:.boundingSphere].<br />
		Les sphères englobantes ne sont pas calculées par défaut. Ils doivent être calculés explicitement, sinon elles sont `null`.
		</p>

		<h3>[method:undefined computeTangents]()</h3>
		<p>
		Calcule et ajoute un attribut de tangente à cette géométrie.<br />
		Le calcul n'est pris en charge que pour les géométries indexées et si les attributs position, normal et uv sont définis. Lorsque vous utilisez une carte normale d'espace tangent, favorisez l'algorithme MikkTSpace fourni par
		[page:BufferGeometryUtils.computeMikkTSpaceTangents].
		</p>

		<h3>[method:undefined computeVertexNormals]()</h3>
		<p>Calcule les normales des sommets en faisant la moyenne des normales des faces.</p>

		<h3>[method:this copy]( [param:BufferGeometry bufferGeometry] )</h3>
		<p>Copie un autre BufferGeometry dans ce BufferGeometry.</p>

		<h3>[method:BufferAttribute deleteAttribute]( [param:String name] )</h3>
		<p>Efface un [page:BufferAttribute attribute] avec le nom spécifié.</p>

		<h3>[method:undefined dispose]()</h3>
		<p>
		Libère les ressources liées au GPU allouées par cette instance. Appelez cette méthode chaque fois que cette instance n'est plus utilisée dans votre application.
		</p>

		<h3>[method:BufferAttribute getAttribute]( [param:String name] )</h3>
		<p>Renvoie un [page:BufferAttribute attribute] avec le nom spécifié.</p>

		<h3>[method:BufferAttribute getIndex] ()</h3>
		<p>Retourne le tampon [page:.index].</p>

		<h3>[method:Boolean hasAttribute]( [param:String name] )</h3>
		<p>Renvoie `true` si l'attribut avec le nom spécifié existe.</p>

		<h3>[method:this lookAt] ( [param:Vector3 vector] )</h3>
		<p>
		vector - Un vecteur monde à regarder.<br /><br />

		Fait pivoter la géométrie pour faire face à un point dans l'espace. Cela se fait généralement en une seule opération et non pendant une boucle.
		Utilisez [page:Object3D.lookAt] pour une utilisation typique du maillage en temps réel.
		</p>

		<h3>[method:undefined normalizeNormals]()</h3>
		<p>
		Chaque vecteur normal dans une géométrie aura une magnitude de 1.
		Cela corrigera l'éclairage sur les surfaces géométriques.
		</p>

		<h3>[method:this rotateX] ( [param:Float radians] )</h3>
		<p>
		Fait pivoter la géométrie autour de l'axe X. Cela se fait généralement en une seule opération et non pendant une boucle.
    Utilisez [page:Object3D.rotation] pour une utilisation typique du maillage en temps réel.
		</p>

		<h3>[method:this rotateY] ( [param:Float radians] )</h3>
		<p>
		Fait pivoter la géométrie autour de l'axe Y. Cela se fait généralement en une seule opération et non pendant une boucle.
    Utilisez [page:Object3D.rotation] pour une utilisation typique du maillage en temps réel.
		</p>

		<h3>[method:this rotateZ] ( [param:Float radians] )</h3>
		<p>
		Fait pivoter la géométrie autour de l'axe Z. Cela se fait généralement en une seule opération et non pendant une boucle.
    Utilisez [page:Object3D.rotation] pour une utilisation typique du maillage en temps réel.
		</p>

		<h3>[method:this scale] ( [param:Float x], [param:Float y], [param:Float z] )</h3>
		<p>
		Mettre à l'échelle les données géométriques. Cela se fait généralement en une seule opération et non pendant une boucle.	
	Utilisez [page:Object3D.scale] pour une utilisation typique du maillage en temps réel.
		</p>

		<h3>[method:this setAttribute]( [param:String name], [param:BufferAttribute attribute] )</h3>
		<p>
		Définit un attribut pour cette géométrie. Utilisez ceci plutôt que la propriété attributs,
		parce qu'un hashmap interne de [page:.attributes] est maintenu pour accélérer l'itération sur
		les attributs.
		</p>

		<h3>[method:undefined setDrawRange] ( [param:Integer start], [param:Integer count] )</h3>
		<p>Définissez la propriété [page:.drawRange]. Pour un BufferGeometry non indexé, count est le nombre de sommets à rendre.
		Pour un BufferGeometry indexé, count est le nombre d'indices à rendre.</p>

		<h3>[method:this setFromPoints] ( [param:Array points] )</h3>
		<p>Définit les attributs de ce BufferGeometry à partir d'un tableau de points.</p>

		<h3>[method:this setIndex] ( [param:BufferAttribute index] )</h3>
		<p>Définit le buffer [page:.index].</p>

		<h3>[method:Object toJSON]()</h3>
		<p>Convertit la BufferGeometry en three.js [link:https://github.com/mrdoob/three.js/wiki/JSON-Object-Scene-format-4 JSON Object/Scene format].</p>

		<h3>[method:BufferGeometry toNonIndexed]()</h3>
		<p>Renvoie une version non indexée d'une BufferGeometry indexée.</p>

		<h3>[method:this translate] ( [param:Float x], [param:Float y], [param:Float z] )</h3>
		<p>
		Déplace la géométrie. Cela se fait généralement en une seule opération et non pendant une boucle.
		Utilisez [page:Object3D.position] pour un déplacement de maillage en temps réel typique.
		</p>

		<h2>Source</h2>

		<p>
			[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
		</p>
	</body>
</html>
